package com.example.flowermall.entity.wx;

import lombok.Data;

import java.io.Serializable;

/**
 * 微信支付预下单-主体信息
 * @author shuaifengjie.com
 * v3
 */
@Data
public class WxpayTradeVo implements Serializable {

	/**
	 *
	 */
	private static final long serialVersionUID = 8189139771687842957L;

	// 由微信生成的应用ID，全局唯一。请求基础下单接口时请注意APPID的应用属性，应为公众号的APPID
	// 示例值：wxd678efh567hg6787
	private String appid;

	// 直连商户的商户号，由微信支付生成并下发。
	// 示例值：1230000109
	private String mchid;

	// 商品描述
	// 示例值：Image形象店-深圳腾大-QQ公仔
	private String description;

	// 商户系统内部订单号，只能是数字、大小写字母_-*且在同一个商户号下唯一
	// 示例值：1217752501201407033233368018
	private String out_trade_no;

	// 通知URL必须为直接可访问的URL，不允许携带查询串。
	// 示例值：https://www.weixin.qq.com/wxpay/pay.php
	private String notify_url;

	// 订单金额信息
	private WxTradeAmountVo amount;

	// 支付者信息 - JSAPI，必传
	private WxPayerVo payer;

	// 支付场景描述 - H5，必传
	private WxSceneInfoVo scene_info;

	public WxpayTradeVo() {
		super();
	}

	public WxpayTradeVo(String appid, String mchid, String description, String out_trade_no, String notify_url) {
		super();
		this.appid = appid;
		this.mchid = mchid;
		this.description = description;
		this.out_trade_no = out_trade_no;
		this.notify_url = notify_url;
	}

	@Data
	public static class WxTradeAmountVo {
		// 订单总金额，单位为分。
		// 示例值：100
		private long total;
		// CNY：人民币，境内商户号仅支持人民币。
		// 示例值：CNY
		private String currency = "CNY";

		public WxTradeAmountVo() {
			super();
		}
		public WxTradeAmountVo(long total) {
			super();
			this.total = total;
		}
	}

	@Data
	public static class WxPayerVo {
		// 用户在直连商户appid下的唯一标识。 下单前需获取到用户的Openid，Openid获取详见
		// 示例值：oUpF8uMuAJO_M2pxb1Q9zNjWeS6o
		private String openid;

		public WxPayerVo() {
			super();
		}
		public WxPayerVo(String openid) {
			super();
			this.openid = openid;
		}
	}

	@Data
	public static class WxSceneInfoVo {
		// 用户的客户端IP，支持IPv4和IPv6两种格式的IP地址。
		// 示例值：14.23.150.211
		private String payer_client_ip;
		// H5场景信息
		private WxH5InfoVo h5_info;

		public WxSceneInfoVo() {
			super();
		}
		public WxSceneInfoVo(String payer_client_ip) {
			super();
			this.payer_client_ip = payer_client_ip;
		}
	}

	@Data
	public static class WxH5InfoVo {
		// 场景类型
		// 示例值：iOS, Android, Wap
		private String type = "Wap";
	}

}
